#include <stdio.h>

//位段 -> 用于节省空间 -> 较为不稳定, 不跨平台
//位段的成员必须是int家族的->int, unsigned int, signed int, char
//位段的成员名后面有一个冒号和一个数字
//一个位段中最好只有一种数据类型

struct A
{
    //一次开辟4byte
    int _a:2;//分配2个比特位
    int _b:5;//分配5个比特位
    int _c:10;//分配10个比特位
    //空间不够了，再开辟4byte
    int _d:30;//分配30个比特位
};
//8byte - 64bit

struct S
{
    //一次开辟1byte
    char a : 3;
    char b : 4;
    //不够了，再开一个字节
    //上个字节剩下的就不用了(不一定)
    char c : 5;
    char d : 4;
};

int main()
{
    printf("%d\n", sizeof(struct A));

    struct S s = { 0 };
    printf("%d\n", sizeof(s));//3
    s.a = 10;//存不进去，能存多少存多少
    s.b = 12;
    s.c = 3;
    s.d = 4;
    printf("%d\n", s.a);//1010，只存入010

    return 0;
}